home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / GameKit / Headers / gamekit / GKMacros.h < prev    next >
Text File  |  1995-06-12  |  2KB  |  42 lines

  1.  
  2. #define GK_FLOOR(x) ((x) > 0 ? (int)(x) : -(int)(-(x)))
  3. #define GK_CEILING(x) ((x) == (int)(x) ? (x) : (x) > 0 ? \
  4.                         1 + (int)(x) : -(1 + (int)(-(x))))
  5. #define GK_ROUND(x) ((x) > 0 ? (int)((x) + 0.5) : -(int)(0.5 - (x)))
  6.  
  7. // SIGN() macros:  ZERO returns 0 for x==0, BINARY returns 1 for x >= 0
  8. #define GK_ZERO_SIGN(x) ((x) < 0 ? -1 : (x) > 0 ? 1 : 0)
  9. #define GK_BINARY_SIGN(x) ((x) < 0 ? -1 : 1)
  10.  
  11. #define GK_SQUARE(x) ((x) * (x))
  12.  
  13. // use this to swap two variables (exprs won't work, obviously)
  14. #define GK_SWAP(a, b) { a^=b; b^=a; a^=b; }
  15.  
  16. // "clamp" a variable (v) to a range (keep it within l to h)
  17. #define GK_CLAMP(v, l, h) ((v) < (l) ? (l) : (v) > (h) ? (h) : (v))
  18.  
  19. #define GK_KEYS_ARE_SAME(a, b) (((a)->data.key.charCode == \
  20.         (b)->data.key.charCode) && ((a)->data.key.charSet == \
  21.         (b)->data.key.charSet))
  22.  
  23. #define GK_RADIUS(x) ((x)->radius)    // x must be GKCircle type!
  24. #define GK_CENTER(x) (&((x)->center))    // x must be GKCircle type!
  25. #define GK_CENTER_X(a) ((a)->center.x)    // x must be GKCircle type!
  26. #define GK_CENTER_Y(a) ((a)->center.y)    // x must be GKCircle type!
  27. #define GK_VERTEX(x, n) (&((x)->points[(n)]))    // x must be GKTriangle type!
  28.  
  29. // manipulate vectors; use a pointer to the appropriate vector
  30. #define GK_NONZERO_VECTOR(a)    (((a)->x != 0.0) || ((a)->y != 0.0))
  31. #define GK_SET_VECTOR(a, b, c)    (a)->x = (b); (a)->y = (c)
  32. #define GK_ADD_VECTORS(a, b)    (a)->x += (b)->x; (a)->y += (b)->y
  33. #define GK_COPY_VECTORS(a, b)    (a)->x  = (b)->x; (a)->y  = (b)->y
  34. #define GK_CLEAR_VECTOR(a)        (a)->x = 0; (a)->y = 0
  35. #define GK_VECTOR_X(a)            (a)->x
  36. #define GK_VECTOR_Y(a)            (a)->y
  37. #define GK_COPY_SIZES(a, b)    (a)->width  = (b)->width; \
  38.             (a)->height  = (b)->height
  39. #define GK_COPY_RECT(a, b)     NX_X(a) = NX_X(b); NX_Y(a) = NX_Y(b); \
  40.             NX_WIDTH(a) = NX_WIDTH(b); NX_HEIGHT(a) = NX_HEIGHT(b);
  41.  
  42.